package com.lzj.demo.design.prototype;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;

/**
 * 题库复制对象类
 * */
public class QuestionBank implements Cloneable {
    //考生
    private String candidate;
    //考号
    private String number;
    private ArrayList<ChoiceQuestion> choiceQuestionList = new ArrayList<>();
    private ArrayList<AnswerQuestion> answerQuestionList = new ArrayList<>();

    public  QuestionBank append(ChoiceQuestion choiceQuestion){
        choiceQuestionList.add(choiceQuestion);
        return this;
    }

    public QuestionBank append(AnswerQuestion answerQuestion){
        answerQuestionList.add(answerQuestion);
        return this;
    }

    @Override
    public Object clone() throws CloneNotSupportedException{
        QuestionBank questionBank = (QuestionBank) super.clone();
        questionBank.choiceQuestionList = (ArrayList<ChoiceQuestion>) choiceQuestionList.clone();
        questionBank.answerQuestionList = (ArrayList<AnswerQuestion>) answerQuestionList.clone();
        //题目混排
        Collections.shuffle(questionBank.answerQuestionList);
        Collections.shuffle(questionBank.choiceQuestionList);
        //答案混排
        ArrayList<ChoiceQuestion> choiceQuestionList = questionBank.choiceQuestionList;
        for (ChoiceQuestion question:choiceQuestionList){
            Topic random = TopicRandomUtil.random(question.getOption(),question.getKey());
            question.setOption(random.getOption());
            question.setKey(random.getKey());
        }
        return questionBank;
    }

    public void setCandidate(String candidate) {
        this.candidate = candidate;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString(){
        StringBuilder detail = new StringBuilder();
        detail.append("\r\n").append("考生：").append(candidate).append("\r\n")
                .append("考号：").append(number).append("\r\n")
                .append("=================================").append("\r\n");

        detail.append("一、选择题").append("\r\n\n");
        for (int idx= 0 ;idx<choiceQuestionList.size();idx++){
            detail.append("第").append(idx+1).append("题：").append(choiceQuestionList.get(idx).getName()).append("\r\n");
            Map<String,String> option = choiceQuestionList.get(idx).getOption();
            for (String key:option.keySet()){
                detail.append(key).append("：").append(option.get(key)).append("\r\n");
            }
            detail.append("答案:").append(choiceQuestionList.get(idx).getKey()).append("\r\n\n");
        }

        detail.append("二、问答题").append("\r\n\n");
        for(int idx = 0;idx<answerQuestionList.size();idx++){
            detail.append("第").append(idx+1).append("题：").append(answerQuestionList.get(idx).getName()).append("\r\n");
            detail.append("答案：").append(answerQuestionList.get(idx).getKey()).append("\r\n\n");
        }
        return detail.toString();
    }
}
